.TITLE DRGTK .IDENT /06.00/ ; ; Copyright (c) 1995-1999 by Mentec, Inc., U.S.A. ; All rights reserved ; ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED ; OR COPIED ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ; ; VERSION 05.05 ; ; D. N. CUTLER 27-MAR-74 ; ; ; PREVIOUSLY MODIFIED BY: ; ; T. J. MILLER ; P. J. BEZEREDI ; J. M. LAWLER ; T. M. MARTIN ; T. LEKAS ; ; ; MODIFIED FOR RSX-11M-PLUS VERSION 3.0 UPDATE F (OR VERSION 4.0) BY: ; ; ERIC POSTPISCHIL 9-MAR-87 ; 06.00 edp050 -- CORRECT MOVEMENT OF T.PRI FROM WORD TO BYTE ; AS INDICATED BY HANS PILMEYER. ; ; ; ; MACRO LIBRARY CALLS ; .MCALL HDRDF$,PCBDF$,TCBDF$ HDRDF$ ;DEFINE TASK HEADER OFFSETS PCBDF$ ;DEFINE PARTITION CONTROL BLOCK OFFSETS TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS ;+ ; **-$DRGTK-GET TASK PARAMETERS ; ; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO FILL A SIXTEEN WORD BUFFER WITH ; TASK PARAMETERS. ; ; DPB FORMAT: ; ; WD. 00 -- DIC(63.),DPB SIZE(2.). ; WD. 01 -- ADDRESS OF A SIXTEEN WORD BUFFER. ; ; BUFFER FORMAT: ; ; WD. 00 -- FIRST HALF OF ISSUING TASK'S NAME. ; WD. 01 -- SECOND HALF OF ISSUING TASK'S NAME. ; WD. 02 -- FIRST HALF OF TASK'S PARTITION NAME. ; WD. 03 -- SECOND HALF OF TASK'S PARTITION NAME. ; WD. 04 -- FIRST HALF OF REQUESTER TASK NAME (NOT SUPPORTED). ; WD. 05 -- SECOND HALF OF REQUESTER TASK NAME (NOT SUPPORTED). ; WD. 06 -- TASK PRIORITY. ; WD. 07 -- CURRENT TASK UIC. ; WD. 10 -- NUMBER OF LOGICAL UNITS. ; WD. 11 -- PROCESSOR INDICATOR ; WD. 12 -- STD FLAGS WORD (NOT SUPPORTED). ; WD. 13 -- ADDRESS OF TASK SST VECTOR TABLE. ; WD. 14 -- SIZE OF TASK SST VECTOR TABLE IN WORDS. ; WD. 15 -- SIZE OF TASK IN BYTES. ; WD. 16 -- SYSTEM ID CODE (6 FOR RSX-11M+). ; WD. 17 -- PROTECTION UIC WORD. ; ; INPUTS: ; ; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. ; R3=ADDRESS OF THE SIXTEEN WORD BUFFER IN THE DPB. ; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ; R5=ADDRESS OF THE TCB OF THE CURRENT TASK. ; ; NOTE THAT IF THE REQUESTING TASK HAS A NON RESIDENT TASK HEADER ; WE WILL ENTER AT $DRGTK WITH THE TASK HEADER MAPPED THROUGH ; KERNEL APR 6. HOWEVER, WE ALSO NEED TO MAP THE USER BUFFER ; AREA WITH APR 6. THEREFORE, WE WILL SAVE NECESSARY HEADER ; INFORMATION IN THE INTERNAL DPB SAVE AREA (WE NO LONGER NEED ; THE DPB) BEFORE MAPPING THE USER BUFFER. ; ; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ; ; C=0 WITH A DIRECTIVE STATUS OF +1. ;- $DRGTK::MOV (R3),R3 ;GET ADDRESS OF 16. WORD BUFFER .IF DF X$$HDR MOV #$DICSV+2,R0 ;USE INTERNAL DPB FOR SAVE AREA .IF DF M$$MUP MOV H.DUIC(R4),(R0)+ ;SAVE DEFAULT UIC .IFF MOV H.CUIC(R4),(R0)+ ;OR CURRENT UIC .ENDC MOV H.NLUN(R4),(R0)+ ;SAVE NUMBER OF LUNS MOV H.TKVA(R4),(R0)+ ;SAVE TASK SST VECTOR ADDR MOV H.TKVL(R4),(R0) ;SAVE LENGTH OF SST VECTOR ASR (R0)+ ;IN TERMS OF WORDS MOV H.WND(R4),R1 ;POINT TO NUMBER OF WINDOW BLOCKS .IF DF U$$DAS BIT #T4.DSP,T.ST4(R5) ;TASK HAVE I/D SPACE ENABLED ? BEQ 10$ ;IF EQ, NO ADD #W.BLGH,R1 ;YES, POINT TO WINDOW 1 (D SPACE ROOT) 10$: ;REFERENCE LABEL .ENDC ; DF U$$DAS MOV W.BHVR+2(R1),(R0) ;CALCULATE TASK SIZE IN BYTES SUB W.BLVR+2(R1),(R0) ; INC (R0)+ ; MOV H.CUIC(R4),(R0) ;SAVE PROTECTION UIC .ENDC MOV #16.*2,R1 ;SET LENGTH OF BUFFER IN BYTES CALL $ACHKP ;ADDRESS CHECK PARAMETER BLOCK MOV T.NAM(R5),(R3)+ ;INSERT NAME OF TASK MOV T.NAM+2(R5),(R3)+ ; MOV T.PCB(R5),R0 ;GET ADDRESS OF TASK PCB MOV P.NAM(R0),(R3)+ ;INSERT NAME OF PARTITION MOV P.NAM+2(R0),(R3)+ ; CMP (R3)+,(R3)+ ;POINT TO TASK PRIORITY ADDRESS MOVB T.PRI(R5),(R3)+ ; INSERT TASK PRIORITY. CLRB (R3)+ ; CLEAR HIGH BYTE. .IF DF X$$HDR MOV #$DICSV+2,R4 ;ADDRESS OF SAVED HEADER INFO MOV (R4)+,(R3)+ ;INSERT UIC MOV (R4)+,(R3)+ ;INSERT NUMBER OF LUNS MOV $PRMOD,(R3)+ ;INSERT PROCESSOR TYPE TST (R3)+ ;POINT TO TASK SST VECTOR ADDRESS MOV (R4)+,(R3)+ ;INSERT TASK SST VECTOR ADDRESS MOV (R4)+,(R3)+ ;INSERT LENGTH OF SST VECTOR IN WORDS MOV (R4)+,(R3)+ ;TASK SIZE IN BYTES .IF DF R$$PRO MOV #11,(R3)+ ;SET CODE FOR P/OS .IFF ;R$$PRO MOV #6,(R3)+ ;SET CODE FOR RSX-11M+ .ENDC ;R$$PRO MOV (R4),(R3) ;SET PROTECTION UIC .IFF .IF DF M$$MUP MOV H.DUIC(R4),(R3)+ ;INSERT DEFAULT UIC .IFF MOV H.CUIC(R4),(R3)+ ;INSERT CURRENT UIC .ENDC MOV H.NLUN(R4),(R3)+ ;INSERT NUMBER OF LUNS MOV $PRMOD,(R3)+ ;INSERT PROCESSOR TYPE TST (R3)+ ;POINT TO TASK SST VECTOR ADDRESS MOV H.TKVA(R4),(R3)+ ;INSERT TASK SST VECTOR ADDRESS MOV H.TKVL(R4),(R3) ;INSERT LENGTH OF SST VECTOR IN WORDS ASR (R3)+ ;CONVERT TO LENGTH IN WORDS MOV H.WND(R4),R1 ;POINT TO NUMBER OF WINDOW BLOCKS .IF DF U$$DAS BIT #T4.DSP,T.ST4(R5) ;TASK HAVE I/D SPACE ENABLED ? BEQ 20$ ;IF EQ, NO ADD #W.BLGH,R1 ;YES, POINT TO WINDOW 1 (D SPACE ROOT) 20$: ;REFERENCE LABEL .ENDC ; DF U$$DAS MOV W.BHVR+2(R1),(R3) ;CALCULATE TASK SIZE IN BYTES SUB W.BLVR+2(R1),(R3) ; INC (R3)+ ; .IF DF R$$PRO MOV #11,(R3)+ ;SET CODE FOR P/OS .IFF ;R$$PRO MOV #6,(R3)+ ;SET CODE FOR RSX-11M+ .ENDC ;R$$PRO MOV H.CUIC(R4),(R3) ;SET PROTECTION UIC .ENDC RETURN ; .END